/* eslint-disable max-lines */
import TauSimpleSelect from '@/components/TauSimpleSelect';
import * as BASE from '@/stores/definitions-base';
import { t } from '@lingui/macro';
import React from 'react';
import { Input, List } from '@alifd/next';
import { ellipsisRender } from '@/components/TauTable';

const {
  DATETIME_TEXT,
  DATE_TEXT,
  TIME_TEXT,
  EMPTY_TEXT,
  ENUMS: ENUMSBase,
  FieldsGrid: FieldGridBase,
  TitleGrid,
  column: columnBase,
  toSelectDataSource,
} = BASE;
export { DATETIME_TEXT, DATE_TEXT, EMPTY_TEXT, TIME_TEXT, TitleGrid, toSelectDataSource };

/**
 * @param {*} path        属性path
 * @param {*} props       column属性
 * @returns column定义
 */
export function column(...args) {
  return columnBase(refundModel, ...args);
}

/**
 * 显示一组表单字段
 * ```js
 * {
 *   fields: string[],    // 字段名称，可以使用.来指定嵌套对象属性，例如order.busOrder.shift
 *   columns: number,     // 列数，默认为4,最大为12,最小为1
 *   model: object,       // 字段定义数据模型的根对象，默认不指定，仅在使用子对象作为根模型时设置
 *   overrideModel: object, // 重载字段定义数据模型
 *   mode: string,        // 表单模式，默认为edit，可选view
 *   itemLayout: object,  // FormItem布局配置，默认为{}
 * }
 * ```
 *
 * @param {object} param0
 * @returns
 */
export function FieldsGrid(props) {
  return <FieldGridBase model={refundModel} {...props} />;
}

//----------------------------------------------------------------------
export const ENUMS = {
  ...ENUMSBase,
  //  ：1 - 包车订单 2 - 班车订单 3 - 巴士订单
  orderType: {
    1: '包车订单',
    2: '专线订单',
    3: '巴士订单',
  },
  refundMethod: {
    0: '财付通',
    1: '线下',
    2: '其他',
  },
  orderStatus: {
    0: t`已取消`,
    1: t`已支付`,
    2: t`进行中`,
    3: t`已完成`,
  },
  ticketStatus: {
    0: t`已取消`,
    1: t`未乘车`,
    2: t`已乘车`,
    3: t`已完成`,
    4: t`状态未知`,
    5: t`已过期`,
  },
  refundType: {
    0: t`车票类型`,
    1: t`取消订单`,
    2: t`其他类型`,
  },
  // <br/> - 0 已驳回<br/> - 1 申请中<br/> - 2 已提交<br/> 前端提交
  state: {
    0: t`已驳回`,
    1: t`申请中`,
    2: t`已提交`,
  },
  // 0-已取消 1-未乘车 2-已乘车 3-已完成 4-未知状态 5-已过期
  ticketState: {
    0: t`已取消`,
    1: t`未乘车`,
    2: t`已乘车`,
    3: t`已完成`,
    4: t`未知状态`,
    5: t`已过期`,
  },

  // 界面常量
  BUS_REFUND_TYPE: {
    0: [
      'cancelTime', 'distanceTime', 'refundPrice', 'cancelRemark', 'type',
    ],
    2: [
      'cancelTime', 'refundPrice', 'cancelRemark', 'type',
    ],
    undefined: [], // 初始化type  防止报错  根据type区分哪个退款类型
  },

  CC_REFUND_TYPE: {
    1: [
      'orderInfo.orderPrice', 'orderInfo.orderState', 'cancelTime', 'distanceTime',
      'refundPrice', 'serviceCharge', 'cancelRemark', 'type', 'refundRole',
    ],
    2: [
      'orderInfo.orderPrice', 'orderInfo.orderState', 'cancelTime',
      'refundPrice', 'cancelRemark', 'type',
    ],
    undefined: [], // 初始化type  防止报错  根据type区分哪个退款类型
  },

  RS_REFUND_TYPE: {
    0: [
      'cancelTime', 'distanceTime', 'refundPrice', 'cancelRemark', 'type',
    ],
    2: [
      'cancelTime', 'refundPrice', 'cancelRemark', 'type',
    ],
    undefined: [], // 初始化type  防止报错  根据type区分哪个退款类型
  },

  SC_REFUND_TYPE: {
    0: [
      'cancelTime', 'distanceTime', 'refundPrice', 'cancelRemark', 'type',
    ],
    2: [
      'cancelTime', 'refundPrice', 'cancelRemark', 'type',
    ],
    undefined: [], // 初始化type  防止报错  根据type区分哪个退款类型
  },

  TABS_ITEMS: [
    { key: '0', label: t`包车退款` },
    { key: '1', label: t`专线退款` },
    { key: '2', label: t`巴士退款` },
    { key: '3', label: t`拼车退款` },
  ],

  TYPE_TEXT: {
    0: t`退票退款详情`,
    1: t`取消订单并退款详情`,
    2: t`其他退款详情`,
  },

};

/**
 * 模型定义:
 * 1. 普通文本仅需要定义label
 * 2. 需要通过枚举转换的值，定义text; 当使用renderer返回组件时，text属性无效，需要通过组件的renderPreview来指定预览时的绘制方式
 * 3. 通用的ui属性需要定制时，定义ui; 特定模式(view, edit, add)下的ui，添加后缀定义为ui_<mode>，例如：ui_view, ui_edit, ui_add, ui_table
 * 4. ui可配置属性包括:
 *    renderer: 内容渲染函数, Form表单中的原型为：(value: any, formData: any, fieldDefinition: any) => ReactNode; Table Column中的原型为: (value: any, columnIndex: number, rowData: any) => ReactNode;
 *    itemProps: 表单Form.Item的属性，可以是对象，或函数({ isPreview: boolean, mode: string, value: any, formData: any, ...otherDefinitions}) => void;
 *    span: Grid Cell占用的列数, 默认为1
 *
 * 【注】获取接口的model定义后，vscode中通过正则替换：^(\s+)"label": "([^']+)"  ===> $1label: t`$2`
 */
export const refundModel = {
  applicationId: {
    label: t`申请编号`,
  },
  cancelCoupon: {
    label: t`是否取消卡券`,
  },
  state: {
    label: t`申请状态`,
    text: (v) => ENUMS.state[v],
  },
  refundId: {
    label: t`退款流水号`,
  },
  serviceCharge: {
    label: t`手续费`,
  },
  type: {
    label: t`退款类型`,
    text: (v) => ENUMS.refundType[v],
  },
  refunded: {
    label: t`财务是否退款<br/> - false 未退款<br/> - true 已退款`,
  },
  refundTime: {
    label: t`实际退款时间`,
    text: DATETIME_TEXT,
  },
  distanceTime: {
    label: t`距离时间`,
  },
  cancelTime: {
    label: t`申请取消时间`,
    text: DATETIME_TEXT,
  },
  refundPrice: {
    label: t`申请退款金额`,
    text: (v) => <>{v ? v.toFixed(2) : ''}</>,
  },
  cancelRemark: {
    label: t`申请说明`,
    text: (v) => ellipsisRender(v),
  },
  rejectRemark: {
    label: t`驳回说明`,
  },
  rejectTime: {
    label: t`驳回时间`,
  },
  attachments: {
    label: t`附件`,
    title: {
      label: t`附件标题`,
    },
    description: {
      label: t`附件说明`,
    },
    binaryId: {
      label: t`附件id`,
    },
  },
  orderInfo: {
    label: t`关联订单信息`,
    directRoute: {
      label: t`包车订单必须字段，本次退款是针对哪个任务<br/> false-A段/直达<br/> true-B段`,
    },
    orderId: {
      label: t`订单id`,
    },
    suborderId: {
      label: t`子订单号`,
    },
    orderType: {
      label: t`订单类型：1-包车订单 2-班车订单 3-巴士订单`,
    },
    orderPrice: {
      label: t`订单价格`,
    },
    orderState: {
      label: t`订单状态`,
    },
    orderTime: {
      label: t`出行时间`,
    },
    name: {
      label: t`下单人名称`,
    },
  },
  refundPayers: {
    label: t`退款出资方，如果没有调整分账方数据则不需要上传`,
    pendingSettlementAmount: {
      label: t`待分账金额（单位：分）`,
    },
    settled: {
      label: t`是否分账<br/> false - 未分账（还可调整分账方和退款）<br/> true - 已分账（不可调整分账方，如果去退款需要提示已分账是否还进行退款）`,
    },
    refundedAmount: {
      label: t`已退款金额（单位：分）`,
    },
    contributionAmount: {
      label: t`本次退款出资金额（单位：分）`,
    },
    platformContribution: {
      label: t`是否平台代出资，默认false`,
    },
    targetType: {
      label: t`帐户类型<br/> 由调用方根据分账方身份类型定义，例如：COMPANY,PARTNER,CHANNEL等`,
    },
    targetId: {
      label: t`targetType下的帐户标识`,
    },
    targetName: {
      label: t`帐户名`,
    },
  },
  ticketRefundInfos: {
    label: t`车票退款信息<br/> 注：如果只是忽略车票则只需要把忽略的车票传递上来`,
    ticketCode: {
      label: t`车票号`,
    },
    firstChangePrice: {
      label: t`使用优惠券金额`,
    },
    cancelTicket: {
      label: t`是否取消车票<br/> false - 不取消<br/> true - 取消`,
    },
    isReturn: {
      label: t`是否回程 0：去程，1：回程`,
    },
    passengerName: {
      label: t`乘客名`,
    },
    originalPrice: {
      label: t`原票价`,
    },
    serviceCharge: {
      label: t`手续费`,
    },
    operatingState: {
      label: t`中港通状态`,
    },
    state: {
      label: t`车票状态`,
      text: (v) => ENUMS.ticketState[v],
      ui: {
        renderer: (v) => <>{ENUMS.ticketState[v]}</>,
      },
    },
    refundPrice: {
      label: t`退款金额`,
    },
    operatorRefundPrice: {
      label: t`中港通退款金额`,
    },
    operatorRefundTime: {
      label: t`运营商退款时间`,
    },
  },
  crBy: {
    label: t`创建者`,
  },
  upBy: {
    label: t`最后修改者`,
  },
  crDate: {
    label: t`创建时间`,
  },
  upDate: {
    label: t`最后修收时间`,
  },
  tenantId: {
    label: t`租户ID`,
  },
  id: {
    label: '',
  },
};
